import { resolve } from 'path'
/**
 * 所有的子集路由
 */
export const getChildrenRoutes = (routes: any): any => {
  const result: any[] = []
  routes.forEach((route: any) => {
    if (route.children && route.children.length > 0) {
      result.push(...route.children)
    }
  })
  return result
}
/**
 * 处理脱离层级的路由
 */
export const filterRoutes = (routes: any[]) => {
  // 所有的子集路由
  const childrenRoutes: any[] = getChildrenRoutes(routes)
  // 根据子集路由进行查重操作
  return routes.filter((route) => {
    // 根据 route 在childrenRoutes 中进行查重,把所有重复路由表 剔除
    return !childrenRoutes.find((childrenRoute) => {
      return childrenRoute.path === route.path
    })
  })
}
function isNull(data: any) {
  if (!data) return true
  if (JSON.stringify(data) === '{}') return true
  if (JSON.stringify(data) === '{}') return true
}
/**
 * 根据 routes 数据,返回对应的menu 规则数据
 */
export const generateMenus = (routes: any, basePath = '') => {
  const result: any[] = []
  // 不满足条件 `meta && meta.title && meta.icon` 的数据不应该存在
  routes.forEach((item: any) => {
    // 不存在 children && 不存在meta 直接 return
    if (isNull(item.children) && isNull(item.meta)) return
    // 存在 children,不存在meta, 迭代 generateMenus
    if (isNull(item.meta) && !isNull(item.children)) {
      result.push(...generateMenus(item.children))
      return
    }
    // 不存在 children,存在meta,存在meta || 存在children && 存在 meta
    // 因为最终的menu 需要进行跳转,此时我们需要合并path
    // console.log(path)
    const routePath = resolve(basePath, item.path)
    // 路由分离之后,可能存在同名父路由的情况
    let route: any = result.find((item: any) => item.path === routePath)
    // 当前 路由尚未加入到reslut
    if (!route) {
      route = {
        ...item,
        path: routePath,
        children: []
      }
      // icon && title
      if (route.meta.icon && route.meta.title) {
        result.push(route)
      }
    }
    // 存在children && 存在 meta
    if (!isNull(item.children)) {
      route.children.push(...generateMenus(item.children, route.path))
    }
  })
  return result
}
